/**
 * @ProjectName: p2p_core_sina 
 * @Copyright: Copyright (c) 2016, qudoulicai All Rights Reserved. 
 * @address: Hangzhou City, Zhejiang Province, China
 * @date: 2016年2月4日 下午2:08:25
 * @Description: 标相关审核处理
 */
package com.qdlc.p2p.biz.processor.task;

import org.apache.log4j.Logger;

import com.qdlc.p2p.common.core.queue.QueueHandlers;
import com.qdlc.p2p.common.core.queue.ReplayValueEvent;
import com.qdlc.p2p.common.core.queue.ValueEvent;
import com.qdlc.p2p.common.util.MailUtil;

/**
 * <p>标相关审核处理</p>
 * @author Kaiju Zhao 2016年2月4日 下午2:08:25
 * @version V1.0   
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify by user: {修改人} 2016年2月4日 下午2:08:25
 * @modify by reason:{原因}
 */
public abstract class AbstractVerifyBorrowTaskProcessor extends AbstractTaskProcessor {
    private static final Logger logger = Logger.getLogger(AbstractVerifyBorrowTaskProcessor.class);
    
    /**
     * 重写异常处理：延迟1s，然后重放到队列中执行。解决异步通知时，数据还没有保存到数据库中的问题
     * @param hander
     * @param event
     * @param exception
     * @see com.qdlc.p2p.biz.processor.task.AbstractTaskProcessor#processException(com.qdlc.p2p.common.core.queue.QueueHandler, com.qdlc.p2p.common.core.queue.ValueEvent, java.lang.Exception)
     */
    @SuppressWarnings("static-access")
    @Override
    public void exceptionProcess(ValueEvent event, Exception exception) {
        logger.info("++++ process exception:" + exception.getMessage(), exception);
        try {
            Thread.currentThread().sleep(1000);
            if (event instanceof ReplayValueEvent) {
                ReplayValueEvent replayEvent = (ReplayValueEvent) event;
                if (replayEvent.isFinalFailure()) {
                    MailUtil.sendMail("标相关审核处理异常！" + exception.getMessage());
                } else {
                    replayEvent.incrementAndGet();
                    QueueHandlers.put(replayEvent);
                }
            }
        } catch (Exception e) {
            logger.info("++++ process exception:" + e.getMessage(), e);
        }
    }
}
